Computer software applications today provide a wide variety of controls for allowing users to interact with and manipulate content presented on a computer. For example, the recent growth in the popularity of digital photography can be attributed, in part, to the development of user-friendly applications and operating systems, which facilitate interaction with digital images. These applications and operating systems often make it easy for users to store, organize and share their digital photos.
With the proliferation of interest in digital images, many applications and operating systems today also include tools for editing and manipulating digital images. For example, the user may alter the colors of an image by adding brightness to the presented colors. As another example, the user may resize, rotate or apply a geometric transformation to an image. For manipulations such as these, a texture resampling algorithm must be employed.
As known to those skilled in the art, texture resampling algorithms use a portion of the original image (known as a resampling window) to generate the transformed image. A variety of texture resampling algorithms exist in the art, and the existing algorithms vary in the degree of complexity and in the size of the utilized resampling window. For example, the nearest neighbor method is a texture resampling algorithm that generates an output pixel by simply mapping the output pixel's location onto the input image and copying the pixel nearest to that location. While this algorithm is simple and may be performed quickly, it often produces unacceptable results. Multiple algorithms known in the art provide better quality, but they involve more complex and slower computations. For example, bilinear interpolation algorithms are well-known to provide intermediate quality with intermediate performance. Algorithms such as bicubic, b-spline bicubic and Lanczos-sinc provide high quality results, but they require complex, time-consuming operations, as well as large resampling windows.
To more quickly and efficiently handle operations related to digital images, many computers today include a graphics processing unit (GPU). A GPU is a dedicated graphics processor with a platform that allows for image processing at speeds much faster than traditional central processing units (CPUs). GPUs often include simple, built-in resampling algorithms such as nearest neighbor or bilinear interpolation. However, existing GPUs do not support high-end texture resampling algorithms. Such algorithms are not built-in to the GPUs. Further, while modern GPUs have programmable components that allow implementation of algorithms designed specifically for the GPU, these components can only handle a limited number of instructions and a limited number of sample points. Given these limitations, modern GPUs are incapable of performing complex texture resampling algorithms. Accordingly, these complex algorithms must be performed at slow speeds by CPUs.